// 手机号验证
export function isPhone(value) {
  return /^1[3-9]\d{9}$/.test(value)
}

// 邮箱验证
export function isEmail(value) {
  return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(value)
}

// 空值验证
export function isEmpty(value) {
  return value === undefined || value === null || value === ''
}

// URL验证
export function isUrl(value) {
  return /^https?:\/\/[^\s/$.?#].[^\s]*$/.test(value)
}

// 身份证号验证
export function isIdCard(value) {
  return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(value)
}

// 密码复杂度验证 (至少包含字母和数字,长度8-20)
export function isPassword(value) {
  return /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,20}$/.test(value)
}

// 用户名验证 (2-32字符)
export function isUsername(value) {
  return value?.length >= 2 && value?.length <= 32
}

// 是否为数字
export function isNumber(value) {
  return !isNaN(Number(value))
}

// 是否为中文
export function isChinese(value) {
  return /^[\u4e00-\u9fa5]+$/.test(value)
}

// 是否为英文
export function isEnglish(value) {
  return /^[a-zA-Z]+$/.test(value)
}

// 表单校验器
export function createValidator(rules) {
  return (form) => {
    for (const key in rules) {
      const rule = rules[key]
      const value = form[key]

      // 必填校验
      if (rule.required && isEmpty(value)) {
        return {
          key,
          message: rule.message || `${key}不能为空`
        }
      }

      // 正则校验
      if (rule.pattern && !rule.pattern.test(value)) {
        return {
          key,
          message: rule.message || `${key}格式不正确`
        }
      }

      // 自定义校验
      if (rule.validator) {
        const res = rule.validator(value)
        if (res !== true) {
          return {
            key,
            message: res || `${key}校验失败`
          }
        }
      }

      // 长度校验
      if (rule.min && value?.length < rule.min) {
        return {
          key,
          message: rule.message || `${key}长度不能小于${rule.min}`
        }
      }
      if (rule.max && value?.length > rule.max) {
        return {
          key,
          message: rule.message || `${key}长度不能大于${rule.max}`
        }
      }
    }

    return null
  }
}

// 使用示例
// const rules = {
//   username: {
//     required: true,
//     validator: isUsername,
//     message: '用户名格式不正确'
//   },
//   phone: {
//     required: true,
//     validator: isPhone,
//     message: '手机号格式不正确'
//   }
// }
// const validate = createValidator(rules)
// const error = validate(form)
// if (error) {
//   console.log(error.message)
// }